
package com.xbongbong.paas.domain.dao;

import com.xbongbong.paas.domain.entity.FormNumForOneApplicationEntity;
import com.xbongbong.paas.domain.entity.OneFormMaxListTypeNumEntity;
import com.xbongbong.paas.domain.entity.PaasFormEntity;
import com.xbongbong.paas.domain.entity.ext.PaasFormEntityExt;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;


/**
* @author autoGen
* @time 2018-08-13 09:59:18
*/
@Repository
@Mapper
public interface PaasFormDao {


	Integer insert(PaasFormEntity paasForm);
	Integer update(PaasFormEntity paasForm);

	/**
	 * 批量插入实体
	 * @param paasFormList
	 * @return 返回数据的列表
	 */
	Integer insertBatch(@Param("list") List<PaasFormEntity> paasFormList);
	/**
	 * 批量更新实体
	 * @param list
	 * @param corpid
	 * @return 返回数据的列表
	 */
	Integer updateBatch(@Param("list") List<PaasFormEntity> list, @Param("corpid") String corpid);

	/**
	 * 批量更新实体
	 * @param list
	 * @param corpid
	 * @return 返回数据的列表
	 */
	Integer initBatch(@Param("list") List<PaasFormEntityExt> list, @Param("corpid") String corpid);

	Integer deleteByKey(@Param("key") Long key, @Param("corpid") String corpid);

	PaasFormEntityExt getByKey(@Param("key") Long key, @Param("corpid") String corpid);

	PaasFormEntityExt getByKeyIncludeDel(@Param("key") Long key, @Param("corpid") String corpid);


	List<PaasFormEntityExt>  findEntitys(@Param("param") Map<String, Object> param);

	List<PaasFormEntity>  findEntity(@Param("param") Map<String, Object> param);

	Integer getEntitysCount(@Param("param") Map<String, Object> param);

	/**
	 * 用户表单列表
	 * @param map
	 * @return
	 */
    List<PaasFormEntityExt> userFormList(Map<String,Object> map);

	/**
	 * 更新表单名称
	 * @param paasForm
	 * @return
	 */
	Integer updateName(PaasFormEntity paasForm);

	/**
	 * 更新标题
	 * @param entity
	 * @return
	 */
    Integer updateCustomTitle(PaasFormEntity entity);

	/**
	 * 根据menuId删除表单
	 * @param menuId
	 * @param corpid
	 * @return
	 */
	Integer deleteByMenuId(@Param("menuId") Long menuId, @Param("corpid") String corpid);

	/**
	 * 根据menuId查找表单
	 * @param key
	 * @param corpid
	 * @return
	 */
    PaasFormEntityExt getByMenuId(@Param("menuId") Long key,@Param("corpid")  String corpid);

	/**
	 * 根据menuId和业务类型查找表单
	 * @param key
	 * @param corpid
	 * @return
	 */
	PaasFormEntityExt getByMenuIdAndBusinessType(@Param("menuId") Integer key,@Param("corpid")  String corpid,@Param("businessType") Integer businessType);

    /**
     * 根据业务类型查找表单
     * @param businessType
     * @param corpid
     * @return
     */
    PaasFormEntityExt getByBusinessType(@Param("businessType") Integer businessType, @Param("corpid") String corpid, @Param("columns") String columns);

	PaasFormEntityExt getByBusinessType4Distributor(@Param("businessType") Integer businessType, @Param("corpid") String corpid, @Param("distributor") Integer distributor, @Param("columns") String columns);

	List<Long> getFormIdList4Distributor(@Param("businessType") Integer businessType, @Param("corpid") String corpid, @Param("distributor") Integer distributor);
	/**
	 * 根据业务类型查找表单
	 * @param param
	 * @return
	 */
	List<PaasFormEntityExt> getByBusinessTypes(@Param("param") Map<String, Object> param);

	/**
	 * 开启关闭业绩分配
	 *
	 * @param key 表单id
	 * @param corpid 公司id
	 * @param openDistribution 是否开启
	 * @return 是否成功
	 */
    Integer updateDistribution(@Param("key") Long key, @Param("corpid") String corpid, @Param("openDistribution") Integer openDistribution);
	/**
	 * 单应用最大表单类型数
	 * @param corpid 公司id
	 * @return
	 */
	FormNumForOneApplicationEntity getOneApplicationMaxFormTypeNum(@Param("corpid") String corpid);

	/**
	 * 单表单最大列表类型数
	 * @param corpid
	 * @return
	 */
	OneFormMaxListTypeNumEntity getOneFormMaxListTypeNum(@Param("corpid") String corpid);

	/**
	 * 根据业务类型查询没有钉钉待办模板的表单信息
	 * @param param
	 * @return
	 */
	List<PaasFormEntityExt> getFormWithoutProcessCodeByBusinessType(@Param("param") Map<String, Object> param);

	/**
	 * 慎用！！！如果分库后则强制不能使用该方法！！！
	 * 因为，该方法没有限制corpid（专门给资金管理改造一期使用：批量更新线上的回款单menuId）
	 * 批量更新表单：回款单的menuId
	 * @param list
	 * @return java.lang.Integer
	 * @author zcp
	 * @date 19/11/4 004 21:57
	 * @update 19/11/4 004 21:57
	 * @since v1.0
	 * @version v1.0
	 */
	Integer updateBatchTemp(@Param("list") List<PaasFormEntityExt> list);

    Long getFormIdByBusinessType(@Param("corpid") String corpid, @Param("businessType") int businessType);

    PaasFormEntityExt getByBusinessTypeNoEnable(@Param("businessType") int businessType, @Param("corpid") String corpid);

	/**
	 * 批量更新表单del字段
	 * @param del
	 * @param updateTime
	 * @param idIn
	 * @param corpid
	 */
	void batchUpdateDel(@Param("del") Integer del, @Param("updateTime") Integer updateTime, @Param("idIn") List<Long> idIn, @Param("corpid") String corpid);
	/**
	 * 批量删除
	 * @param list 主键id集合
	 * @param corpid
	 * @author xingxing.xiao
	 */
	Integer deleteBatch(@Param("list") List<Long> list, @Param("corpid") String corpid);

	/**
	 * 批量更新业务规则(主要是镜像用来把business_rules改为1)
	 * @param list
	 * @param corpid
	 * @param businessRules
	 * @author xingxing.xiao
	 * @date 2020/06/12 20:05
	 */
	Integer updateBusinessRuleBatch(@Param("list") List<Long> list, @Param("corpid") String corpid, @Param("businessRules") String businessRules);

	Integer deleteBatchByMenuId(@Param("list") List<Long> list, @Param("corpid") String corpid);

	PaasFormEntity getByFormId(@Param("key") Long formId,@Param("corpid") String corpid);

    List<PaasFormEntity> getNameByKeys(@Param("formIdList")List<Long> formIdList, @Param("corpid")String corpid);
}